1. Field of Invention
The present invention relates generally to software engineering systems and methods for self-adaptive dynamic software components. More particularly, the present invention relates to a novel approach to engineering self-adaptive dynamic software components with the introduction of a “control interface” in addition to the interfaces for input data and output data. The control interface may receive as an input one or more environment-specific or domain-specific conditions and/or parameters which may be used to dynamically configure the software components to perform appropriately in specific environments or domains.
2. Description of Prior Art
Today's businesses face unprecedented changes and heavily depend on information technology (IT) for adapting to the changes and for efficient operations with high productivity. And yet, IT has become a major bottleneck for business transformation or optimization due to the long lead time required to implement new processes/functions or changes in the business models and processes.
The business processes continuously change while today's IT solutions are often not flexible enough to adapt to the changes in time and on budget. For example, one-third of IT projects run over time, one-fifth run over budget and one-fifth fall short of planned functionality according to the recent studies. Consequently, there is quite often a significant mismatch between the business process and the deployed IT solution for the business.
One source of the problem is the current software engineering model where the software design is based on static components, i.e., the functional behaviour of a software component is statically defined inside of software components and any changes to the functional behaviour of a component requires redevelopment of the component.
Using the traditional approach to model a business into software engineering, a business operation needs to be decomposed into autonomous functional units. Then, the business functional units are mapped to software components, and the interfaces are specified for the software components to receive input data and to produce output data. All the business rules, functional behaviour, and business processes associated with the components are embedded inside the functional components. This may result in a rigid, inflexible approach to software development.